package main

//方法（Method）是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者（Receiver）
/*
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
	函数体
}
接收者变量：接收者中的参数变量名在命名时，官方建议使用接收者类型名称首字母的小写，而不是self、this之类的命名。
例如，Person类型的接收者变量应该命名为 p，Connector类型的接收者变量应该命名为c等。
接收者类型：接收者类型和参数类似，可以是指针类型和非指针类型。
方法名、参数列表、返回参数：具体格式与函数定义相同。
*/
import "fmt"

type Player struct {
	Name        string
	HealthPoint int
	Level       int
	NowPosition []int
	Prop        []string
}

func NewPlayer(name string, hp int, level int, np []int, prop []string) *Player {

	return &Player{
		name,
		hp,
		level,
		np,
		prop,
	}
}

func (p Player) attack() {
	fmt.Printf("%s发起攻击！\n", p.Name)
}
func (p *Player) attacked() {
	fmt.Printf("%s被攻击！\n", p.Name)
	p.HealthPoint -= 10
	fmt.Println(p.HealthPoint)
}

func (p *Player) buyProp(prop string) {
	p.Prop = append(p.Prop, prop)
	fmt.Printf("%s购买道具！\n", p.Name)
}

func main() {
	player := NewPlayer("yuan", 100, 100, nil, nil)
	player.attack()
	player.attacked()
	fmt.Println(player.HealthPoint)
	player.buyProp("魔法石")
	fmt.Println(player.Prop)
}
